//实现基于udp协议的网络通信模型
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
int main()
{
	//1.创建socket使用socket函数
	int sockfd=socket(AF_INET,SOCK_DGRAM,0);
	if(-1==sockfd)
	{
		perror("socket");
		exit(-1);
	}
	//成功打印
	printf("成功创建socket成功\n");
	//2.准备通信地址使用结构体类型
	struct sockaddr_in addr;
	addr.sin_family=AF_INET;
	addr.sin_port=htons(8888);
	addr.sin_addr.s_addr=inet_addr("172.30.3.137");
	//3.绑定通信地址,使用bind函数
	int res=bind(sockfd,(struct sockaddr *)&addr,sizeof(addr));
	if(-1==res)
	{
		perror("bind");
		exit(-1);
	}
	printf("成功绑定socket\n");
	//4.进行通信,send/sendto/recvrecvgrom函数
	while(1)
	{
	char buf[100]={};
    struct sockaddr_in recv_addr;
	socklen_t len=sizeof(recv_addr);
	res=recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&recv_addr,&len);
	if(-1==res)
	{
		perror("recv");
		exit(-1);
	}
	printf("客户端发来的数据是:%s,数据大小是%d\n",buf,res);
	res=sendto(sockfd,"i receive it !",20,0,(struct sockaddr*)&recv_addr,len);
	if(-1==res)
	{
		perror("sendto");
		exit(-1);
	}
	
	}
	//5.关闭socket,使用close函数
	res=close(sockfd);
	if(-1==res)
	{
		perror("close");
		exit(-1);
	}
	printf("成功关闭socket");
	return 0;
}
